home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Source / GNU / cc / obcp-hash.h < prev    next >
C/C++ Source or Header  |  1994-01-04  |  8KB  |  212 lines

  1. /* starting time is 13:16:31 */
  2. /* C code produced by gperf version 2.5 (GNU C++ version) */
  3. /* Command-line: /Net/seaport/homes/nebraska/mwagner/bin/gperf -G -i 1 -p -j1 -o -t -N is_reserved_word -k1,4,$,7 obcp.gperf  */
  4. /* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word -k1,4,$,7 gplus.gperf  */
  5. struct resword { char *name; short token; enum rid rid; enum languages lang; char *save; };
  6.  
  7. #define TOTAL_KEYWORDS 99
  8. #define MIN_WORD_LENGTH 2
  9. #define MAX_WORD_LENGTH 15
  10. #define MIN_HASH_VALUE 7
  11. #define MAX_HASH_VALUE 180
  12. /* maximum key range = 174, duplicates = 0 */
  13.  
  14. static unsigned int
  15. hash (str, len)
  16.      register char *str;
  17.      register int unsigned len;
  18. {
  19.   static unsigned char asso_values[] =
  20.     {
  21.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  22.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  23.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  24.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  25.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  26.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  27.      181, 181, 181, 181,  59, 181, 181, 181, 181, 181,
  28.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  29.      181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
  30.      181, 181, 181, 181, 181,   1, 181, 103,   7,  38,
  31.       27,   1,  13,   6,  22,  67, 181,   1,  18,   8,
  32.       32,   1,  19, 181,  40,  12,   5,  34,  21,  67,
  33.        1,  23, 181, 181, 181, 181, 181, 181,
  34.     };
  35.   register int hval = len;
  36.  
  37.   switch (hval)
  38.     {
  39.       default:
  40.       case 7:
  41.         hval += asso_values[str[6]];
  42.       case 6:
  43.       case 5:
  44.       case 4:
  45.         hval += asso_values[str[3]];
  46.       case 3:
  47.       case 2:
  48.       case 1:
  49.         hval += asso_values[str[0]];
  50.     }
  51.   return hval + asso_values[str[len - 1]];
  52. }
  53.  
  54. static struct resword wordlist[] =
  55. {
  56.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  57.       {"else",  ELSE, NORID, lang_c,},
  58.       {"",}, 
  59.       {"out",  TYPE_QUAL, RID_OUT, lang_objc,},
  60.       {"",}, {"",}, 
  61.       {"goto",  GOTO, NORID, lang_c,},
  62.       {"except",  EXCEPT, NORID, lang_cplusplus,        /* Extension */},
  63.       {"__headof__",  HEADOF, NORID, lang_c,},
  64.       {"",}, {"",}, 
  65.       {"__const__",  TYPE_QUAL, RID_CONST, lang_c,},
  66.       {"__volatile",  TYPE_QUAL, RID_VOLATILE, lang_c,},
  67.       {"__const",  TYPE_QUAL, RID_CONST, lang_c,},
  68.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE, lang_c,},
  69.       {"enum",  ENUM, NORID, lang_c,},
  70.       {"__asm__",  GCC_ASM_KEYWORD, NORID, lang_c,},
  71.       {"",}, 
  72.       {"__headof",  HEADOF, NORID, lang_c,},
  73.       {"typeof",  TYPEOF, NORID, lang_c, },
  74.       {"__asm",  GCC_ASM_KEYWORD, NORID, lang_c,},
  75.       {"",}, {"",}, {"",}, 
  76.       {"do",  DO, NORID, lang_c,},
  77.       {"try",  TRY, NORID, lang_cplusplus            /* Extension */,},
  78.       {"sizeof",  SIZEOF, NORID, lang_c, },
  79.       {"this",  THIS, NORID, lang_cplusplus, },
  80.       {"long",  TYPESPEC, RID_LONG, lang_c,},
  81.       {"delete",  DELETE, NORID, lang_cplusplus,},
  82.       {"__typeof__",  TYPEOF, NORID, lang_c,},
  83.       {"bycopy",  TYPE_QUAL, RID_BYCOPY, lang_objc,},
  84.       {"template",  TEMPLATE, NORID, lang_cplusplus, },
  85.       {"typedef",  SCSPEC, RID_TYPEDEF, lang_c, },
  86.       {"extern",  SCSPEC, RID_EXTERN, lang_c,},
  87.       {"double",  TYPESPEC, RID_DOUBLE, lang_c,},
  88.       {"",}, 
  89.       {"__classof__",  CLASSOF, NORID, lang_c,},
  90.       {"case",  CASE, NORID, lang_c,},
  91.       {"switch",  SWITCH, NORID, lang_c, },
  92.       {"__typeof",  TYPEOF, NORID, lang_c,},
  93.       {"friend",  SCSPEC, RID_FRIEND, lang_cplusplus,},
  94.       {"__extension__",  EXTENSION, NORID, lang_c,},
  95.       {"private",  VISSPEC, RID_PRIVATE, lang_cplusplus,},
  96.       {"",}, {"",}, {"",}, 
  97.       {"__classof",  CLASSOF, NORID, lang_c,},
  98.       {"",}, {"",}, 
  99.       {"for",  FOR, NORID, lang_c,},
  100.       {"struct",  AGGR, RID_RECORD, lang_c, },
  101.       {"raise",  RAISE, NORID, lang_cplusplus,        /* Extension */},
  102.       {"",}, 
  103.       {"const",  TYPE_QUAL, RID_CONST, lang_c,},
  104.       {"static",  SCSPEC, RID_STATIC, lang_c, },
  105.       {"short",  TYPESPEC, RID_SHORT, lang_c, },
  106.       {"__alignof__",  ALIGNOF, NORID, lang_c,},
  107.       {"",}, 
  108.       {"protected",  VISSPEC, RID_PROTECTED, lang_cplusplus,},
  109.       {"",}, 
  110.       {"class",  AGGR, RID_CLASS, lang_cplusplus,},
  111.       {"headof",  HEADOF, NORID, lang_cplusplus,},
  112.       {"virtual",  SCSPEC, RID_VIRTUAL, lang_cplusplus, },
  113.       {"raises",  RAISES, NORID, lang_cplusplus,        /* Extension */},
  114.       {"",}, 
  115.       {"union",  AGGR, RID_UNION, lang_c, },
  116.       {"__alignof",  ALIGNOF, NORID, lang_c,},
  117.       {"__inline",  SCSPEC, RID_INLINE, lang_c,},
  118.       {"int",  TYPESPEC, RID_INT, lang_c,},
  119.       {"__inline__",  SCSPEC, RID_INLINE, lang_c,},
  120.       {"signed",  TYPESPEC, RID_SIGNED, lang_c, },
  121.       {"throw",  THROW, NORID, lang_cplusplus        /* Extension */,},
  122.       {"void",  TYPESPEC, RID_VOID, lang_c, },
  123.       {"__signed__",  TYPESPEC, RID_SIGNED, lang_c,},
  124.       {"public",  VISSPEC, RID_PUBLIC, lang_cplusplus, },
  125.       {"if",  IF, NORID, lang_c,},
  126.       {"classof",  CLASSOF, NORID, lang_cplusplus,},
  127.       {"",}, 
  128.       {"__attribute",  ATTRIBUTE, NORID, lang_c,},
  129.       {"continue",  CONTINUE, NORID, lang_c,},
  130.       {"__attribute__",  ATTRIBUTE, NORID, lang_c,},
  131.       {"@interface",  INTERFACE, NORID, lang_objc,},
  132.       {"@defs",  DEFS, NORID, lang_objc,},
  133.       {"operator",  OPERATOR, NORID, lang_cplusplus,},
  134.       {"while",  WHILE, NORID, lang_c, },
  135.       {"",}, 
  136.       {"__wchar_t",  TYPESPEC, RID_WCHAR, lang_cplusplus, /* Unique to ANSI C++ */},
  137.       {"",}, {"",}, 
  138.       {"id",  OBJECTNAME, RID_ID, lang_objc,},
  139.       {"oneway",  TYPE_QUAL, RID_ONEWAY, lang_objc,},
  140.       {"",}, {"",}, {"",}, 
  141.       {"in",  TYPE_QUAL, RID_IN, lang_objc,},
  142.       {"new",  NEW, NORID, lang_cplusplus,},
  143.       {"catch",  CATCH, NORID, lang_cplusplus,},
  144.       {"__signed",  TYPESPEC, RID_SIGNED, lang_c,},
  145.       {"",}, 
  146.       {"@encode",  ENCODE, NORID, lang_objc,},
  147.       {"",}, {"",}, 
  148.       {"auto",  SCSPEC, RID_AUTO, lang_c,},
  149.       {"exception",  AGGR, RID_EXCEPTION, lang_cplusplus,    /* Extension */},
  150.       {"inout",  TYPE_QUAL, RID_INOUT, lang_objc,},
  151.       {"return",  RETURN, NORID, lang_c, },
  152.       {"",}, 
  153.       {"asm",  ASM_KEYWORD, NORID, lang_c,},
  154.       {"",}, 
  155.       {"break",  BREAK, NORID, lang_c,},
  156.       {"@end",  END, NORID, lang_objc,},
  157.       {"",}, {"",}, 
  158.       {"mutable",  SCSPEC, RID_MUTABLE, lang_cplusplus,},
  159.       {"",}, 
  160.       {"char",  TYPESPEC, RID_CHAR, lang_c,},
  161.       {"",}, 
  162.       {"all",  ALL, NORID, lang_cplusplus,        /* Extension */},
  163.       {"@protocol",  PROTOCOL, NORID, lang_objc,},
  164.       {"float",  TYPESPEC, RID_FLOAT, lang_c,},
  165.       {"",}, {"",}, {"",}, {"",}, 
  166.       {"@selector",  SELECTOR, NORID, lang_objc, },
  167.       {"__label__",  LABEL, NORID, lang_c,},
  168.       {"@implementation",  IMPLEMENTATION, NORID, lang_objc,},
  169.       {"",}, 
  170.       {"@protected",  PROTECTED, NORID, lang_objc,},
  171.       {"",}, 
  172.       {"unsigned",  TYPESPEC, RID_UNSIGNED, lang_c, },
  173.       {"",}, {"",}, 
  174.       {"@private",  PRIVATE, NORID, lang_objc,},
  175.       {"inline",  SCSPEC, RID_INLINE, lang_c,},
  176.       {"",}, {"",}, {"",}, {"",}, {"",}, 
  177.       {"default",  DEFAULT, NORID, lang_c,},
  178.       {"",}, 
  179.       {"@public",  PUBLIC, NORID, lang_objc,},
  180.       {"",}, 
  181.       {"volatile",  TYPE_QUAL, RID_VOLATILE, lang_c, },
  182.       {"reraise",  RERAISE, NORID, lang_cplusplus,    /* Extension */},
  183.       {"",}, {"",}, {"",}, 
  184.       {"register",  SCSPEC, RID_REGISTER, lang_c, },
  185.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  186.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  187.       {"",}, {"",}, {"",}, {"",}, 
  188.       {"overload",  OVERLOAD, NORID, lang_cplusplus,},
  189.       {"@class",  CLASS, NORID, lang_objc,},
  190. };
  191.  
  192. struct resword *
  193. is_reserved_word (str, len)
  194.      register char *str;
  195.      register unsigned int len;
  196. {
  197.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  198.     {
  199.       register int key = hash (str, len);
  200.  
  201.       if (key <= MAX_HASH_VALUE && key >= 0)
  202.         {
  203.           register char *s = wordlist[key].name;
  204.  
  205.           if (*s == *str && !strcmp (str + 1, s + 1))
  206.             return &wordlist[key];
  207.         }
  208.     }
  209.   return 0;
  210. }
  211. /* ending time is 13:16:31 */
  212.